package com.wang.model;

import java.util.Objects;

/**
 * 方法信息模型，用于唯一标识一个方法（包名+类名+方法名）
 */
public class MethodInfo {
    private final String packageName;  // 包名（如 com.example.util）
    private final String className;    // 类名（如 RedisUtil）
    private final String methodName;   // 方法名（如 set）

    public MethodInfo(String fullClassName, String methodName) {
        this.methodName = methodName;
        // 从完整类名中拆分包名和类名
        if (fullClassName.contains(".")) {
            this.packageName = fullClassName.substring(0, fullClassName.lastIndexOf("."));
            this.className = fullClassName.substring(fullClassName.lastIndexOf(".") + 1);
        } else {
            this.packageName = "";
            this.className = fullClassName;
        }
    }

    // 获取完整方法签名（如 com.example.util.RedisUtil.set）
    public String getFullName() {
        return (packageName.isEmpty() ? "" : packageName + ".") + className + "." + methodName;
    }

    // Getter方法
    public String getClassName() { return className; }
    public String getMethodName() { return methodName; }
    public String getPackageName() { return packageName; }

    // 重写equals和hashCode确保方法唯一标识
    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        MethodInfo that = (MethodInfo) o;
        return Objects.equals(packageName, that.packageName) &&
                Objects.equals(className, that.className) &&
                Objects.equals(methodName, that.methodName);
    }

    @Override
    public int hashCode() {
        return Objects.hash(packageName, className, methodName);
    }

    @Override
    public String toString() {
        return getFullName();
    }
}
